from typing import Optional


class Question:
    """题目实体类"""
    def __init__(self,
                 id: Optional[int] = None,
                 J: Optional[str] = None,
                 P: Optional[str] = None,
                 I: Optional[str] = None,
                 Q: Optional[str] = None,
                 T: Optional[str] = None,
                 A: Optional[str] = None,
                 B: Optional[str] = None,
                 C: Optional[str] = None,
                 D: Optional[str] = None,
                 F: Optional[str] = None,
                 LA: Optional[str] = None,
                 LB: Optional[str] = None,
                 LC: Optional[str] = None,
                 type: Optional[int] = None):
        """
        初始化题目实体
        :param id: 题目ID
        :param J: 编号1
        :param P: 编号2
        :param I: 编号3
        :param Q: 题干
        :param T: 答案
        :param A: 选项A
        :param B: 选项B
        :param C: 选项C
        :param D: 选项D
        :param F: 可选的图片，BASE64编码，以`data:image/png;base64,`开头
        :param LA: LA=1 表示存在于A类题库
        :param LB: LB=1 表示存在于B类题库
        :param LC: LC=1 表示存在于C类题库
        :param type: 类型：1 单选题，2 多选题
        """
        self.id = id
        self.J = J
        self.P = P
        self.I = I
        self.Q = Q
        self.T = T
        self.A = A
        self.B = B
        self.C = C
        self.D = D
        self.F = F
        self.LA = LA
        self.LB = LB
        self.LC = LC
        self.type = type

    @staticmethod
    def from_dict(data: dict) -> 'Question':
        """从字典创建Question对象"""
        return Question(
            id=data.get('id'),
            J=data.get('J'),
            P=data.get('P'),
            I=data.get('I'),
            Q=data.get('Q'),
            T=data.get('T'),
            A=data.get('A'),
            B=data.get('B'),
            C=data.get('C'),
            D=data.get('D'),
            F=data.get('F'),
            LA=data.get('LA'),
            LB=data.get('LB'),
            LC=data.get('LC'),
            type=data.get('type')
        )

    def __dict__(self) -> dict:
        """将实体转换为字典"""
        return {
            'id': self.id,
            'J': self.J,
            'P': self.P,
            'I': self.I,
            'Q': self.Q,
            'T': self.T,
            'A': self.A,
            'B': self.B,
            'C': self.C,
            'D': self.D,
            'F': self.F,
            'LA': self.LA,
            'LB': self.LB,
            'LC': self.LC,
            'type': self.type
        }
